home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / C / bit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  1.6 KB  |  74 lines

  1. /*
  2.  * bit.c --
  3.  *    Standard bit array code.
  4.  *
  5.  * Identification:
  6.  *    $Header: /private/postgres/src/lib/C/RCS/bit.c,v 1.4 1990/09/25 16:21:47 kemnitz Exp $
  7.  */
  8.  
  9. #include "utils/memutils.h"
  10.  
  11. int
  12. NumberOfBitsPerByte()
  13. {
  14.     return(BitsPerByte);
  15. }
  16.  
  17. void
  18. BitArraySetBit(bitArray, bitIndex)
  19.     BitArray    bitArray;
  20.     BitIndex    bitIndex;
  21. {    
  22.     bitArray[bitIndex / BitsPerByte] |= (1 << 
  23.             (BitsPerByte - (bitIndex % BitsPerByte) - 1));
  24.     return;
  25. }
  26.  
  27. void
  28. BitArrayClearBit(bitArray, bitIndex)
  29.     BitArray    bitArray;
  30.     BitIndex    bitIndex;
  31. {
  32.     bitArray[bitIndex / BitsPerByte] &= ~(1 << 
  33.             (BitsPerByte - (bitIndex % BitsPerByte) - 1));
  34.     return;
  35. }
  36.  
  37. bool
  38. BitArrayBitIsSet(bitArray, bitIndex)
  39.     BitArray    bitArray;
  40.     BitIndex    bitIndex;
  41. {    
  42.     return( (bool) (((bitArray[bitIndex / BitsPerByte] &
  43.               (1 << (BitsPerByte - (bitIndex % BitsPerByte)
  44.                         - 1)
  45.               )
  46.              ) != 0 ) ? 1 : 0) );
  47. }
  48.  
  49. void
  50. BitArrayZero(bitArray, bitIndex, numberOfBits)
  51.     BitArray    bitArray;
  52.     BitIndex    bitIndex;    /* start bit */
  53.     BitIndex    numberOfBits;    /* number of Bits to set to zero */
  54. {
  55.     long    i;
  56.     long    n;
  57.     BitIndex    endIndex;
  58.     unsigned long    startByte, stopByte;    /* XXX */
  59.  
  60.     n = numberOfBits;
  61.     startByte = bitIndex / BitsPerByte;
  62.     endIndex = bitIndex + numberOfBits -1;
  63.     stopByte = (bitIndex + numberOfBits) / BitsPerByte;
  64.  
  65.     bitArray[startByte]  &= 
  66.            ((~0 << (BitsPerByte - (bitIndex % BitsPerByte))) |
  67.         (~0 >> (Min(BitsPerByte - 1, bitIndex + numberOfBits - 1) + 1))
  68.            );
  69.     for (i = startByte + 1; i < stopByte; i++)
  70.         bitArray[i]  &= 0;
  71.     if (stopByte > startByte)
  72.         bitArray[stopByte]  &=  (~0 >> ((endIndex % BitsPerByte) +1));
  73. }
  74.